#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct contacts{
	int id;
	char name[15];
	char number[15];
}a[50]={0},huan,change;
int MIN=0;

void sort()
{
	printf("请选择排序的方式\n\n");
	printf("(1)编号排序   (2)姓名排序\n\n");
	int i,sum,min,min1,sum1;
	scanf("%d",&i);
	switch(i)
	{
		case 1:
			for(int j=0; j<49; j++)
			{
				min1=j;
				for(int k=j+1; k<50;k++)
				{
					if(a[min1].id>a[k].id&&a[k].number[0]!=0)
					{
						min1=k;
					}
					change=a[j];
					a[j]=a[min1];
					a[min1]=change;
				}
			}
			break;
		case 2:
			for(int i=0; i<49; i++) 
			{
				min=i;
				for(int j=i+1; j<50; j++)
				{
					sum=strcmp(a[min].name,a[j].name);
					if(sum>0&&a[j].number[0]!=0)
					{
						min=j;
			 		} 
				}
				huan=a[i];
				a[i]=a[min];
				a[min]=huan;
			}
			break;
			 
			
	}
}
 
void Delete()
{
	int n;
	printf("请输入删除位置：");
	scanf("%d",&n);
	n=n-1;
	if(n>=50)
	{
		printf("处理编号超过阈值\n");
	}
	else
	{
		if(a[n].number[0]==0)
		{
			printf("此处无数据\n");
		}
		else
		{
			for(int i=0; i<15; i++)
			{
				a[n].name[i]='\0';
				a[n].number[i]='\0';
			}
			MIN--;
		}
	}	
 } 

void addition()
{
	int sum,count=0,b;
	printf("请输入存放位置: ");
	scanf("%d",&sum);
	sum=sum-1;
	for(int i=0; i<50; i++)
	{
		if(a[i].number[0]==0)
		{
			count=1;
			break;
		}
	}
	if(a[sum].number[0]==0)
	{
		b=0;
	}
	else
	{
		printf("此处已有数据\n");
	}
	if(count==0)
	{
		printf("通讯录已满\n");
	}
	if(sum>=50)
	{
		printf("处理编号超过阈值\n");
	}
	
	if(count==1&&sum<50&&a[sum].number[0]==0)
	{
		MIN++;
		a[sum].id=sum+1;
		printf("请输入联系人姓名：");
		scanf("%s",&a[sum].name);
		printf("请输入联系人电话：");
		scanf("%s",&a[sum].number); 
	}
}

void amend()
{
	int n;
	printf("请输入修改位置：");
	scanf("%d",&n); 
	n=n-1;
	if(n>=50)
	{
		printf("处理编号超过阈值\n");
	}
	else
	{
		if(a[n].number[0]==0)
		{
			printf("此处无数据\n");
		}
		else
		{
			for(int i=0; i<15; i++)
				{
					a[n].name[i]='\0';
					a[n].number[i]='\0';
				}
			printf("已擦除原有信息，请重新键入\n");
			printf("请输入联系人姓名：");
			scanf("%s",a[n].name);
			printf("请输入联系人电话："); 
			scanf("%s",a[n].number); 
		}
	}	
}
void find()
{
	int sum1=1,sum2=1;
	char find1[15]={0};
	printf("请输入你要查找的联系人的姓名或电话号码：");
	scanf("%s",find1);
	printf("%s\n",find1);
	for(int q=0; q<50; q++)
		{
			sum1=strcmp(a[q].name,find1);
			sum2=strcmp(a[q].number,find1);
			if(sum1==0||sum2==0)
				{
					printf("你要找的联系人的姓名是：%s,电话号码是：%s\n",a[q].name,a[q].number);
					sum1=0;
					break;
				}
			else
				{
					sum1=-1;
				}	
		} 
		if(sum1==-1)
			{
				sum1=0;
				printf("查无此人\n");
			}
}
void menu()
{
	printf("==========通讯录==========\n\n\n\n");
	printf("==========界面==========\n\n"); 
	printf("人数: %d 人      | 剩余空间 %d 人\n\n",MIN,50-MIN);
	for(int j=0; j<50; j++)
		{
			if(a[j].number[0]!=0)
			printf("编号： %d |姓名：%s | 电话号码： %s \n",a[j].id,a[j].name,a[j].number);
		}
	printf("\n操作列表:\n\n");
	printf("(1)排序     (2)添加     (3)删除\n\n");
	printf("(4)修改     (5)查找     (6)退出程序\n");
}
int main(void)
{
	int m=0,n,sum=0,sum2=1,n1;
	menu();
	do{
		printf("\n请输入操作: ");
		scanf("%d",&n);
		switch(n){
			case 1:
				sort();  //排序 
                for (int i = 0; i < 1000000000; i++);  //延迟时间，让用户看清相关信息 
				system("cls");
				menu();
				break;
			case 2:
				addition();  //添加 
                for (int i = 0; i < 1000000000; i++);  //延迟时间，让用户看清相关信息 
				system("cls");
				menu();
				break;
			case 3: 
				Delete();   //删除 
                for (int i = 0; i < 1000000000; i++);  //延迟时间，让用户看清相关信息 
				system("cls");
				menu();
				break;
			case 4:
				amend();   //修改 
                for (int i = 0; i < 1000000000; i++);  //延迟时间，让用户看清相关信息 
				system("cls");
				menu();
				break;
			case 5:
				find();   //查找 
				for(int i=0;i<1000000000;i++);  //延迟时间，让用户看清相关信息 
				system("cls");
				menu();
				break;
			case 6:
					sum=1; 
					break;
			default:
			printf("\nError!!!\n错误操作指令，请重新输入\n"); 
			break;
		}
	}while(sum!=1);
	return 0; 
 } 
